package service.impl;

import dao.UserDao;
import dao.impl.UserDaoImpl;
import model.User;
import service.UserService;

import java.util.List;

/**
 * UserService接口的实现类，负责实现用户相关的业务逻辑
 * 在调用DAO层进行数据操作前，添加了必要的业务验证和逻辑处理
 */
public class UserServiceImpl implements UserService {
    // 创建UserDao实例，用于数据库操作
    private UserDao userDao = new UserDaoImpl();

    /**
     * 用户注册业务方法的实现
     * 首先检查用户名是否已存在，然后调用DAO层进行注册
     * @param user 要注册的用户对象，包含用户名、密码和邮箱信息
     * @return 注册成功返回true，如果用户名已存在则返回false
     * @see UserService#registerUser(User)
     */
    @Override
    public boolean registerUser(User user) {
        // 业务逻辑验证：检查用户名是否已存在
        if (userDao.findByUsername(user.getUsername()) != null) {
            return false; // 用户名已存在
        }
        return userDao.registerUser(user);
    }

    /**
     * 根据用户名查询用户业务方法的实现
     * 直接调用DAO层进行查询
     * @param username 要查询的用户名
     * @return 找到的用户对象，如果不存在则返回null
     * @see UserService#findByUsername(String)
     */
    @Override
    public User findByUsername(String username) {
        return userDao.findByUsername(username);
    }

    /**
     * 根据用户ID查询用户业务方法的实现
     * 直接调用DAO层进行查询
     * @param id 要查询的用户ID
     * @return 找到的用户对象，如果不存在则返回null
     * @see UserService#findById(int)
     */
    @Override
    public User findById(int id) {
        return userDao.findById(id);
    }

    /**
     * 查询所有用户业务方法的实现
     * 直接调用DAO层查询所有用户
     * @return 所有用户对象的列表，如果没有用户则返回空列表
     * @see UserService#findAllUsers()
     */
    @Override
    public List<User> findAllUsers() {
        return userDao.findAllUsers();
    }

    /**
     * 更新用户信息业务方法的实现
     * 首先检查用户是否存在，然后调用DAO层进行更新
     * @param user 包含更新后信息的用户对象，需要包含有效的用户ID
     * @return 更新成功返回true，如果用户不存在则返回false
     * @see UserService#updateUser(User)
     */
    @Override
    public boolean updateUser(User user) {
        // 业务逻辑验证：检查用户是否存在
        if (userDao.findById(user.getId()) == null) {
            return false; // 用户不存在
        }
        return userDao.updateUser(user);
    }

    /**
     * 删除用户业务方法的实现
     * 首先检查用户是否存在，然后调用DAO层进行删除
     * @param id 要删除的用户ID
     * @return 删除成功返回true，如果用户不存在则返回false
     * @see UserService#deleteUser(int)
     */
    @Override
    public boolean deleteUser(int id) {
        // 业务逻辑验证：检查用户是否存在
        if (userDao.findById(id) == null) {
            return false; // 用户不存在
        }
        return userDao.deleteUser(id);
    }
}